using System;
using System.Collections.Generic;
using System.Text;
using Mentrixmax.Comuns.DAO.Abstrato;
using System.Collections;
using Entidades;
using System.Data.SqlClient;

namespace DAO
{
    public class TabelaDAO : AbstractDAO
    {
        public override string getSequencialName()
        {
            return "id";
        }

        public override string getTableName()
        {
            return "sys.objects";
        }

        public override string getChave()
        {
            return "id";
        }

        public override Mentrixmax.Comuns.Entidades.Interface.IEntidade retornaEntidade(System.Data.SqlClient.SqlDataReader reader)
        {
            Entidades.TabelaEntidades tb = new Entidades.TabelaEntidades();
            tb.NomeTabela = reader["name"].ToString();
            tb.Sequencial = Convert.ToInt32(reader["id"]);
            return tb;
        }

        public override System.Collections.Hashtable preencheEntidade(Mentrixmax.Comuns.Entidades.Interface.IEntidade entidade)
        {
            TabelaEntidades tb = (TabelaEntidades)entidade;
            Hashtable hs = new Hashtable();
            hs.Add("name", tb.NomeTabela);
            return hs;
        }

        public IList<TabelaEntidades> findAllTables()
        {
            IList<TabelaEntidades> lista = new List<TabelaEntidades>();
            try
            {
                string sql = "select  * from sysobjects where xtype = 'U'";
                SqlDataReader reader = executeQuery(sql);
                while (reader.Read())
                {
                    lista.Add((TabelaEntidades)retornaEntidade(reader));
                }
                reader.Close();
            }
            catch
            {
            }

            return lista;
        }

        private TabelaDAO() { }
        private static TabelaDAO dao = null;
        public static TabelaDAO getInstance() {
            if (dao == null) {
                dao = new TabelaDAO();
            }
            return dao;
        }
    }
}
